প্রোগ্রামিং দক্ষতা বাড়ানোর জন্য প্র্যাকটিস প্রোজেক্ট খুবই কার্যকর। প্র্যাকটিস প্রোজেক্টগুলোর মাধ্যমে বাস্তব সমস্যার সমাধান শেখা যায়, এবং কোডিংয়ের দক্ষতা ও আত্মবিশ্বাস বাড়ে। কিছু মজার ও কার্যকর প্র্যাকটিস প্রোজেক্টের আইডিয়া নিচে দেওয়া হলো:
এই প্র্যাকটিস প্রোজেক্টগুলো আপনার কোডিং দক্ষতা বাড়াতে এবং বাস্তব সমস্যার সমাধান শেখাতে সহায়ক হবে।
C++ ব্যবহার করে একটি সাধারণ ক্যালকুলেটর অ্যাপ তৈরি করা যেতে পারে, যা ব্যবহারকারীর ইনপুট অনুযায়ী গাণিতিক অপারেশন (যেমন, যোগ, বিয়োগ, গুণ, ভাগ) সম্পাদন করে। নিচে একটি সাধারণ ক্যালকুলেটর প্রোগ্রামের উদাহরণ দেয়া হলো, যা মৌলিক চারটি গাণিতিক অপারেশন করতে সক্ষম।
#include <iostream>
using namespace std;
class Calculator {
public:
// যোগ ফাংশন
double add(double a, double b) {
return a + b;
}
// বিয়োগ ফাংশন
double subtract(double a, double b) {
return a - b;
}
// গুণ ফাংশন
double multiply(double a, double b) {
return a * b;
}
// ভাগ ফাংশন
double divide(double a, double b) {
if (b == 0) {
cout << "Error: Division by zero is not allowed." << endl;
return 0;
}
return a / b;
}
};
int main() {
Calculator calc;
double num1, num2;
char op;
bool running = true;
cout << "Welcome to Simple Calculator!" << endl;
cout << "Operations: + (add), - (subtract), * (multiply), / (divide)" << endl;
while (running) {
cout << "\nEnter first number: ";
cin >> num1;
cout << "Enter operation (+, -, *, /) or 'q' to quit: ";
cin >> op;
if (op == 'q' || op == 'Q') {
cout << "Exiting Calculator. Thank you!" << endl;
break;
}
cout << "Enter second number: ";
cin >> num2;
switch(op) {
case '+':
cout << "Result: " << calc.add(num1, num2) << endl;
break;
case '-':
cout << "Result: " << calc.subtract(num1, num2) << endl;
break;
case '*':
cout << "Result: " << calc.multiply(num1, num2) << endl;
break;
case '/':
cout << "Result: " << calc.divide(num1, num2) << endl;
break;
default:
cout << "Invalid operation. Please try again." << endl;
}
}
return 0;
}
ক্যালকুলেটর ক্লাস:
Calculator
নামে একটি ক্লাস তৈরি করা হয়েছে, যাতে চারটি ফাংশন আছে—add
, subtract
, multiply
, এবং divide
।মেইন ফাংশন (main):
Calculator
ক্লাসের একটি অবজেক্ট calc
তৈরি করা হয়েছে।switch
স্টেটমেন্ট ব্যবহার করে ইনপুট অনুযায়ী গাণিতিক অপারেশনটি নির্ধারণ করা হয়েছে।op
যদি 'q'
বা 'Q'
হয়, তবে লুপ থেকে বেরিয়ে এসে প্রোগ্রাম বন্ধ হয়ে যায়।Welcome to Simple Calculator!
Operations: + (add), - (subtract), * (multiply), / (divide)
Enter first number: 10
Enter operation (+, -, *, /) or 'q' to quit: +
Enter second number: 20
Result: 30
Enter first number: 15
Enter operation (+, -, *, /) or 'q' to quit: *
Enter second number: 3
Result: 45
Enter first number: 25
Enter operation (+, -, *, /) or 'q' to quit: /
Enter second number: 5
Result: 5
Enter first number: 10
Enter operation (+, -, *, /) or 'q' to quit: q
Exiting Calculator. Thank you!
divide
ফাংশনে শূন্য দ্বারা ভাগ করার চেষ্টা করলে এর জন্য একটি ত্রুটি বার্তা প্রদর্শন করা হয়।'q'
বা 'Q'
প্রবেশ করিয়ে প্রোগ্রামটি বন্ধ করতে পারেন।%
), পাওয়ার (^
), স্কয়ার রুট ইত্যাদি।এই প্রোগ্রামটি একটি মৌলিক ক্যালকুলেটর তৈরি করে, যা ব্যবহারকারীর চাহিদা অনুযায়ী আরও উন্নত করা যেতে পারে।
স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম হলো এমন একটি প্রোগ্রাম, যেখানে শিক্ষার্থীদের তথ্য সংরক্ষণ, হালনাগাদ, খুঁজে পাওয়া এবং মুছে ফেলা যায়। এই ধরনের প্রোগ্রাম সাধারণত শিক্ষাপ্রতিষ্ঠানে ব্যবহৃত হয় শিক্ষার্থীদের তথ্য এবং তাদের একাডেমিক তথ্য ব্যবস্থাপনার জন্য। একটি সাধারণ স্টুডেন্ট ম্যানেজমেন্ট সিস্টেমে শিক্ষার্থীদের নাম, আইডি, বিভাগ, বয়স, ফলাফল ইত্যাদি সংরক্ষণ করা হয়।
নিচের প্রোগ্রামটি একটি বেসিক স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম তৈরি করতে ব্যবহার করা হয়েছে। এখানে শিক্ষার্থীদের জন্য একটি ক্লাস তৈরি করা হয়েছে এবং তাদের তথ্য সংরক্ষণ, হালনাগাদ এবং প্রদর্শনের জন্য বিভিন্ন মেথড ব্যবহার করা হয়েছে।
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Student {
private:
int id;
string name;
int age;
string department;
public:
Student(int id, string name, int age, string department)
: id(id), name(name), age(age), department(department) {}
int getId() const { return id; }
void display() const {
cout << "ID: " << id << "\nName: " << name
<< "\nAge: " << age << "\nDepartment: " << department << endl;
}
void update(string newName, int newAge, string newDept) {
name = newName;
age = newAge;
department = newDept;
}
};
class StudentManagementSystem {
private:
vector<Student> students;
public:
void addStudent(int id, string name, int age, string department) {
Student newStudent(id, name, age, department);
students.push_back(newStudent);
cout << "Student added successfully!" << endl;
}
void displayStudent(int id) const {
for (const auto& student : students) {
if (student.getId() == id) {
student.display();
return;
}
}
cout << "Student not found!" << endl;
}
void updateStudent(int id, string name, int age, string department) {
for (auto& student : students) {
if (student.getId() == id) {
student.update(name, age, department);
cout << "Student information updated successfully!" << endl;
return;
}
}
cout << "Student not found!" << endl;
}
void deleteStudent(int id) {
for (auto it = students.begin(); it != students.end(); ++it) {
if (it->getId() == id) {
students.erase(it);
cout << "Student deleted successfully!" << endl;
return;
}
}
cout << "Student not found!" << endl;
}
void displayAllStudents() const {
if (students.empty()) {
cout << "No students available." << endl;
return;
}
for (const auto& student : students) {
student.display();
cout << "---------------------" << endl;
}
}
};
int main() {
StudentManagementSystem sms;
int choice, id, age;
string name, department;
do {
cout << "\nStudent Management System\n";
cout << "1. Add Student\n2. Display Student\n3. Update Student\n4. Delete Student\n5. Display All Students\n6. Exit\n";
cout << "Enter your choice: ";
cin >> choice;
switch (choice) {
case 1:
cout << "Enter ID: "; cin >> id;
cout << "Enter Name: "; cin.ignore(); getline(cin, name);
cout << "Enter Age: "; cin >> age;
cout << "Enter Department: "; cin.ignore(); getline(cin, department);
sms.addStudent(id, name, age, department);
break;
case 2:
cout << "Enter ID: "; cin >> id;
sms.displayStudent(id);
break;
case 3:
cout << "Enter ID: "; cin >> id;
cout << "Enter New Name: "; cin.ignore(); getline(cin, name);
cout << "Enter New Age: "; cin >> age;
cout << "Enter New Department: "; cin.ignore(); getline(cin, department);
sms.updateStudent(id, name, age, department);
break;
case 4:
cout << "Enter ID: "; cin >> id;
sms.deleteStudent(id);
break;
case 5:
sms.displayAllStudents();
break;
case 6:
cout << "Exiting..." << endl;
break;
default:
cout << "Invalid choice. Please try again." << endl;
}
} while (choice != 6);
return 0;
}
Student ক্লাস:
id
, name
, age
, এবং department
গুণাবলী রয়েছে।display
মেথড শিক্ষার্থীর তথ্য প্রিন্ট করতে ব্যবহৃত হয়।update
মেথড শিক্ষার্থীর তথ্য আপডেট করতে ব্যবহৃত হয়।StudentManagementSystem ক্লাস:
students
নামের একটি ভেক্টর রয়েছে, যা সব শিক্ষার্থীর অবজেক্ট সংরক্ষণ করে।addStudent
মেথড নতুন শিক্ষার্থী যোগ করে।displayStudent
মেথড নির্দিষ্ট id
অনুযায়ী শিক্ষার্থীর তথ্য প্রিন্ট করে।updateStudent
মেথড নির্দিষ্ট id
এর শিক্ষার্থীর তথ্য আপডেট করে।deleteStudent
মেথড নির্দিষ্ট id
এর শিক্ষার্থী মুছে ফেলে।displayAllStudents
মেথড সকল শিক্ষার্থীর তথ্য প্রিন্ট করে।main ফাংশন:
এই প্রোগ্রামটি একটি বেসিক স্টুডেন্ট ম্যানেজমেন্ট সিস্টেমের ধারণা দেয়, যা প্রোগ্রামিংয়ের বেসিক কনসেপ্টগুলো যেমন, ক্লাস, অবজেক্ট, ভেক্টর, এবং মেনু ড্রাইভেন প্রোগ্রামিং-এর অনুশীলন করতে সহায়ক।
C++ ব্যবহার করে একটি সহজ ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল তৈরি করা যায়, যা ফাইলের ডেটাকে একটি নির্দিষ্ট কী (key) এর মাধ্যমে এনক্রিপ্ট এবং ডিক্রিপ্ট করতে সক্ষম। এই উদাহরণে, XOR এনক্রিপশন পদ্ধতি ব্যবহার করা হবে, যা প্রতিটি বাইটের সাথে একটি কী XOR অপারেশন প্রয়োগ করে ডেটাকে এনক্রিপ্ট এবং ডিক্রিপ্ট করে।
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// এনক্রিপশন এবং ডিক্রিপশন ফাংশন
void encryptDecrypt(const string &inputFile, const string &outputFile, char key) {
ifstream inFile(inputFile, ios::binary); // ইনপুট ফাইল ওপেন করা (বাইনারি মোডে)
ofstream outFile(outputFile, ios::binary); // আউটপুট ফাইল ওপেন করা (বাইনারি মোডে)
if (!inFile || !outFile) {
cout << "Error: Could not open input or output file." << endl;
return;
}
char ch;
while (inFile.get(ch)) { // প্রতিটি চরিত্র পড়া
char encryptedChar = ch ^ key; // XOR এনক্রিপশন/ডিক্রিপশন
outFile.put(encryptedChar); // এনক্রিপ্টেড/ডিক্রিপ্টেড ডেটা লেখা
}
inFile.close();
outFile.close();
cout << "Operation completed successfully. Output file: " << outputFile << endl;
}
int main() {
string inputFile, outputFile;
char key;
char choice;
cout << "File Encryption and Decryption Tool" << endl;
cout << "Choose operation:" << endl;
cout << "1. Encrypt a file" << endl;
cout << "2. Decrypt a file" << endl;
cout << "Enter choice (1 or 2): ";
cin >> choice;
cout << "Enter the input file name: ";
cin >> inputFile;
cout << "Enter the output file name: ";
cin >> outputFile;
cout << "Enter a single-character key for encryption/decryption: ";
cin >> key;
if (choice == '1') {
encryptDecrypt(inputFile, outputFile, key); // এনক্রিপশন অপারেশন
} else if (choice == '2') {
encryptDecrypt(inputFile, outputFile, key); // ডিক্রিপশন অপারেশন
} else {
cout << "Invalid choice!" << endl;
}
return 0;
}
ফাংশন encryptDecrypt
:
key
এর সাথে XOR করে এনক্রিপ্ট বা ডিক্রিপ্ট করা হয়।মেইন ফাংশন (main):
encryptDecrypt
ফাংশনে এই ইনপুট গুলো পাঠিয়ে এনক্রিপশন বা ডিক্রিপশন কার্যক্রম সম্পন্ন করা হয়।File Encryption and Decryption Tool
Choose operation:
1. Encrypt a file
2. Decrypt a file
Enter choice (1 or 2): 1
Enter the input file name: plaintext.txt
Enter the output file name: encrypted.txt
Enter a single-character key for encryption/decryption: K
Operation completed successfully. Output file: encrypted.txt
plaintext.txt
ফাইল থেকে encrypted.txt
ফাইল তৈরি করা হয়।encrypted.txt
ফাইলকে plaintext.txt
আউটপুট ফাইল হিসেবে তৈরি করা যায়।char
টাইপ কী ব্যবহার করা হয়েছে, যা এনক্রিপ্ট ও ডিক্রিপ্ট উভয় কাজের জন্য যথেষ্ট।char
এর পরিবর্তে একটি দীর্ঘ এবং শক্তিশালী কী ব্যবহারের মাধ্যমে এনক্রিপশন আরও শক্তিশালী করা যেতে পারে।এই প্রোগ্রামটি একটি বেসিক এনক্রিপশন ও ডিক্রিপশন টুল, যা সহজেই ব্যবহার করা যায় এবং ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য কার্যকর।
টু-ডু লিস্ট অ্যাপ হলো একটি জনপ্রিয় প্র্যাকটিস প্রোজেক্ট, যা ব্যবহারকারীদের বিভিন্ন টাস্ক বা কাজ সংরক্ষণ, আপডেট, মুছা এবং প্রদর্শনের সুযোগ দেয়। এই প্রজেক্টের মাধ্যমে প্রোগ্রামিংয়ের বেসিক ধারণা যেমন ক্লাস, অবজেক্ট, এবং মেনু ড্রাইভেন প্রোগ্রামিং ইত্যাদি শেখা যায়।
নিচে একটি বেসিক টু-ডু লিস্ট অ্যাপ তৈরি করার কোড দেওয়া হলো, যেখানে একটি Task
ক্লাসের মাধ্যমে টাস্কের বৈশিষ্ট্য সংজ্ঞায়িত করা হয়েছে এবং টাস্ক ম্যানেজমেন্টের জন্য বিভিন্ন মেথড তৈরি করা হয়েছে।
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Task {
private:
int id;
string title;
bool completed;
public:
Task(int id, string title) : id(id), title(title), completed(false) {}
int getId() const { return id; }
string getTitle() const { return title; }
bool isCompleted() const { return completed; }
void markComplete() { completed = true; }
void updateTitle(const string& newTitle) { title = newTitle; }
void display() const {
cout << "ID: " << id << "\nTitle: " << title
<< "\nStatus: " << (completed ? "Completed" : "Pending") << endl;
}
};
class TodoList {
private:
vector<Task> tasks;
int nextId = 1;
public:
void addTask(const string& title) {
tasks.emplace_back(nextId++, title);
cout << "Task added successfully!" << endl;
}
void displayTasks() const {
if (tasks.empty()) {
cout << "No tasks available." << endl;
return;
}
for (const auto& task : tasks) {
task.display();
cout << "---------------------" << endl;
}
}
void markTaskComplete(int id) {
for (auto& task : tasks) {
if (task.getId() == id) {
task.markComplete();
cout << "Task marked as completed." << endl;
return;
}
}
cout << "Task not found!" << endl;
}
void updateTask(int id, const string& newTitle) {
for (auto& task : tasks) {
if (task.getId() == id) {
task.updateTitle(newTitle);
cout << "Task updated successfully!" << endl;
return;
}
}
cout << "Task not found!" << endl;
}
void deleteTask(int id) {
for (auto it = tasks.begin(); it != tasks.end(); ++it) {
if (it->getId() == id) {
tasks.erase(it);
cout << "Task deleted successfully!" << endl;
return;
}
}
cout << "Task not found!" << endl;
}
};
int main() {
TodoList todoList;
int choice, id;
string title;
do {
cout << "\nTo-Do List\n";
cout << "1. Add Task\n2. Display All Tasks\n3. Mark Task as Complete\n4. Update Task\n5. Delete Task\n6. Exit\n";
cout << "Enter your choice: ";
cin >> choice;
switch (choice) {
case 1:
cout << "Enter task title: ";
cin.ignore();
getline(cin, title);
todoList.addTask(title);
break;
case 2:
todoList.displayTasks();
break;
case 3:
cout << "Enter task ID to mark as complete: ";
cin >> id;
todoList.markTaskComplete(id);
break;
case 4:
cout << "Enter task ID to update: ";
cin >> id;
cout << "Enter new title: ";
cin.ignore();
getline(cin, title);
todoList.updateTask(id, title);
break;
case 5:
cout << "Enter task ID to delete: ";
cin >> id;
todoList.deleteTask(id);
break;
case 6:
cout << "Exiting..." << endl;
break;
default:
cout << "Invalid choice. Please try again." << endl;
}
} while (choice != 6);
return 0;
}
Task ক্লাস:
id
, title
, এবং completed
প্রোপার্টি রয়েছে।markComplete()
মেথডে টাস্ককে সম্পন্ন হিসেবে চিহ্নিত করা যায়।updateTitle()
মেথডে টাস্কের শিরোনাম আপডেট করা যায়।display()
মেথডে টাস্কের তথ্য প্রদর্শন করা হয়।TodoList ক্লাস:
tasks
নামে একটি ভেক্টর আছে, যেখানে সব টাস্ক অবজেক্ট রাখা হয়।addTask()
নতুন টাস্ক যোগ করে।displayTasks()
সব টাস্ক দেখায়।markTaskComplete()
নির্দিষ্ট আইডি অনুযায়ী টাস্ককে সম্পন্ন হিসেবে চিহ্নিত করে।updateTask()
নির্দিষ্ট আইডি অনুযায়ী টাস্কের শিরোনাম আপডেট করে।deleteTask()
নির্দিষ্ট আইডি অনুযায়ী টাস্ক মুছে ফেলে।main ফাংশন:
এই বেসিক টু-ডু লিস্ট অ্যাপটি প্রোগ্রামিংয়ের বেসিক ধারণা যেমন ক্লাস, অবজেক্ট, এবং ভেক্টর ব্যবহারের চমৎকার অনুশীলন প্রদান করে।
common.read_more